﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Algorithm.Easy_13_RomanNumeralToInteger
{
    //罗马数字转整数
    class MainProject
    {
        static void Main(string[] args)
        {
            Console.WriteLine(RomanToInt("III"));
            Console.WriteLine(RomanToInt("IV"));
            Console.WriteLine(RomanToInt("IX"));
            Console.WriteLine(RomanToInt("LVIII"));
            Console.WriteLine(RomanToInt("MCMXCIV"));

            Console.ReadKey();
        }
        public static int RomanToInt(string s)
        {
            int index = 0;
            int count = 0;
            Dictionary<string, int> data = new Dictionary<string, int>();
            data.Add("I",1);
            data.Add("V", 5);
            data.Add("X", 10);
            data.Add("L", 50);
            data.Add("C", 100);
            data.Add("D", 500);
            data.Add("M", 1000);
            data.Add("IV", 4);
            data.Add("IX", 9);
            data.Add("XL", 40);
            data.Add("XC", 90);
            data.Add("CD", 400);
            data.Add("CM", 900);

            return Transformation(index,count, data,s);
        }

        public static int Transformation(int index,int count, Dictionary<string, int> data, string s)
        {
            if (index  == s.Length-1)
            {
                count += data[s[index].ToString()];
                index++;
            }
            if (index>=s.Length)
            {
                return count;
            }
            string temp = s.Substring(index, 2);

            if (data.ContainsKey(temp))
            {
                count += data[temp];
                index += 2;
            }
            else
            {
                count += data[temp[0].ToString()];
                index++;
            }
            return Transformation(index, count, data, s);
        }
    }
}
